package br.com.puertorico.model.template;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

/**
 * Classe utilit&aacute;ria respons&aacute;vel por carregar um template de
 * documento em Velocity e disponibilizar m&eacute;todos para a
 * obten&ccedil;&atilde;o de um registro de sa&iacute;da
 * 
 * @author alexandre
 * 
 */
public abstract class AbstractTemplateDocumentoBuilder {

	protected VelocityContext contexto = new VelocityContext();

	protected Template template;

	protected String arquivoTemplate;

	protected static final String RTF_ENCODING;

	static {
		RTF_ENCODING = "Windows-1252";
	}

	/**
	 * Adiciona um valor para substitui&ccedil;&atilde;o durante o processamento
	 * 
	 * @param chave
	 *            Chave escolhida para o valor
	 * @param valor
	 *            Objeto para ser parseado
	 */
	public void addValue(String chave, Object valor) {
		contexto.put(chave, valor);
	}

	/**
	 * Processa o template com os par&acirc;metros informados escrevendo o
	 * resultado no Writer passado como par&acirc;metro
	 * 
	 * @param writer
	 *            Escritor do arquivo de sa&iacute;da
	 */
	public void write(String fileName) {
		try {
			Writer writer = new PrintWriter(fileName, RTF_ENCODING);
			template.merge(contexto, writer);
			writer.flush();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public String stringWriter() throws Exception {
		StringWriter writer = new StringWriter();
		template.merge(contexto, writer);
		String ret = writer.getBuffer().toString();
		writer.flush();
		writer.close();
		return ret;
	}

}